package com.juma.cartridge.rlock;

import com.juma.cartridge.rlock.exception.LockAlreadyExistsException;


/**
 * 分布式锁接口
 * @ClassName Lock
 * @Description
 * @Author zhuangguangyou
 * @Date 2019年10月28日 下午4:01:32
 * @Version 1.0
 *
 */
public interface Lock {
	
	String getKey();
	
	String getId();
	
	int getLockSeconds();
	
	long getExpireTime();
	
	
	/**
	 * 抢占锁
	 * @param retryWaitTimes 锁重试间隔时间(毫秒).若值为小于0(负数),则代表不重试,只抢一次锁,未抢成功抛出异常
	 * @throws LockAlreadyExistsException 锁已存在异常(当入参retryWaitTimes为负数,且抢占锁未成功时抛出)
	 */
	void acquire(long retryWaitTimes);
	
	/**
	 * 释放锁
	 */
	void release();
	
	
}
